/*
 * @lc app=leetcode.cn id=24 lang=cpp
 *
 * [24] 两两交换链表中的节点
 */

// @lc code=start

//  struct ListNode {
//      int val;
//      ListNode *next;
//      ListNode() : val(0), next(nullptr) {}
//      ListNode(int x) : val(x), next(nullptr) {}
//      ListNode(int x, ListNode *next) : val(x), next(next) {}
// };

class Solution {
public:
    ListNode* swapPairs(ListNode* head) {
        ListNode node; ListNode *cur = &node;
        cur->next = head;
        while (head != nullptr) {
            ListNode *next = head->next;
            if (next != nullptr) {
                head->next = next->next;
                next->next = head;
                cur->next = next;
                cur = head;
            } else break;
            head = head->next;
        }

        return node.next;
    } 
};
// @lc code=end

